/*
 * @Project_description: 自定义http封装
 */
'use strict'

import qs from 'qs'

const http={}

const message=(msg='请求错误')=>{
    uni.showToast({
        title: msg,
        icon: 'none'
    })
}

/**
 * @description 接口封装
 * @return {Promise} 返回值描述
 * @param options {Object} 参数说明
 */
const request=(options)=>{
    if (options.params) {
        options.url = options.url + '?' + qs.stringify(options.params)
    }
    return new Promise((resolve,reject)=>{
        uni.request({
            url:options.url,
            data:options.data,
            header:options.header,
            method:options.method,
            dataType: options.dataType || 'json',
            timeout: options.timeout || 60000,
            success:res=>{
                if(res.statusCode===200){
                    resolve(res.data)
                }else{
                    message(res.msg)
                    console.error(res)
                    reject(res)
                }

            },
            fail:err=>{
                message()
                console.error(err)
                reject(err)
            }
        })
    })
}

/**
 * @description get请求封装
 * @return {Promise} 返回值描述
 * @param url {String}
 * @param [params] {Object} 参数
 * @param [header] {Object} 请求头
 */
http.get = (url,params,header)=>{
    return request({
        url,
        params,
        header,
        method:'get'
    })
}
/**
 * @description post请求封装
 * @return {Promise} 返回值描述
 * @param url {String}
 * @param [data] {Object} 参数
 * @param [header] {Object} 请求头
 */
http.post = (url,data,header)=>{
    return request({
        url,
        data,
        header,
        method:'post'
    })
}

/**
 * @description delete请求封装
 * @return {Promise} 返回值描述
 * @param url {String}
 * @param [data] {Object} 参数
 * @param [header] {Object} 请求头
 */
http.del = (url,data,header)=>{
    return request({
        url,
        data,
        header,
        method:'delete'
    })
}
/**
 * @description put请求封装
 * @return {Promise} 返回值描述
 * @param url {String}
 * @param [data] {Object} 参数
 * @param [header] {Object} 请求头
 */
http.put = (url,data,header)=>{
    return request({
        url,
        data,
        header,
        method:'put'
    })
}

/**
 * @description 上传文件封装
 * @return {Promise} 返回值描述
 * @param url {String} 接口地址
 * @param filePath {String} 文件路径
 * @param [name]  {String}文件名
 * @param [formData]  {Object} 表单数据
 * @param [header] {Object} 请求头
 */
http.upload = (url,filePath,name='file',formData={},header={})=>{
    return new Promise((resolve,reject)=>{
        uni.uploadFile({
            url,
            filePath,
            name,
            formData,
            header,
            timeout:600000,
            success:res=>{
                if(res.statusCode===200){
                    resolve(JSON.parse(res.data))
                }else{
                    reject(res)
                }
            },
            fail:err=>{
                reject(err)
            }
        })
    })
}
export default http
